
// process.stdin.resume();
// process.stdin.setEncoding('utf-8');
// let input = '';
// process.stdin.on('data', (data) => {
//   input += data;
// });
// process.stdin.on('end', () => {
//   let inputArray = input.split('\n');
//   /**
//    * 待实现函数，在此函数中填入答题代码
//    * doFunc()
//    */
//   // 构建二叉树
//   function TreeNode (val) { // 首先定义节点数据结构
//     this.val = val;
//     this.left = null;
//     this.right = null;
//   }
//   let nodeList = inputArray.shift() // 是个string类型
//   nodeList = JSON.parse(nodeList) // 转换成数组
//   var build = function (valueList) {
//     if (!valueList || valueList.length === 0) {
//       return
//     }
//     root = new TreeNode(valueList.shift())
//     var queue = [root]
//     var tempQueue = []
//     while (queue.length > 0) {
//       var node = queue.shift();
//       if (valueList.length === 0) {//构建结束
//         break;
//       }
//       var leftVal = valueList.shift()
//       if (leftVal !== 0) {//构建左子节点
//         node.left = new TreeNode(leftVal)
//         tempQueue.push(node.left)
//       }

//       if (valueList.length === 0) {//构建结束
//         break;
//       }
//       var rightVal = valueList.shift()
//       if (rightVal !== 0) {//构建又子节点
//         node.right = new TreeNode(rightVal)
//         tempQueue.push(node.right)
//       }
//       if (queue.length === 0) {//本次构建结束
//         queue = tempQueue;
//       }
//     }
//     return root;
//   }
//   var genTree = build(nodeList); // 构建成功二叉树
//   let str = inputArray.shift() // 弹出一个字符串
//   let [q, m, n] = str.split('/') // 得到数组
//   let ziNodeList = inputArray.shift()
//   ziNodeList = JSON.parse(ziNodeList) // 得到字nodelist
//   let ziTree = build(ziNodeList)  // 构建子二叉树
//   // 合并二叉树
//   // 先找到这个子节点
//   function getNode (m, n, root) {
//     let level = -1
//     let count = 0
//     let queue = []
//     queue.push(root) // 让如根节点
//     while (queue.length) {
//       level++
//       let size = queue.length
//       for (let i = 0; i < size; i++) {
//         let node = queue.shift()
//         count++
//         if (level === m && count === n) {
//           return node
//         }
//         node.left && queue.push(node.left)
//         node.right && queue.push(node.right)
//       }
//       count = 0
//     }
//   }
//   let node = getNode(m, n, genTree) // 得到相同的节点
//   // 合并新旧二叉树
//   function mergeTree (genNode, ziNode) {
//     if (genNode === null && ziNode === null) return null
//     if (ziNode === null) return genNode
//     if (genNode === null) return ziNode
//     // console.log(ziNode.val);
//     genNode.val = ziNode.val // 去子二叉树的值
//     genNode.left = mergeTree(genNode.left, ziNode.left)
//     genNode.right = mergeTree(genNode.right, ziNode.right)
//     return genNode
//   }
//   node = mergeTree(node, ziTree)
//   var levelOrder = function (root) {
//     let res = []
//     if (!root) return res
//     let queue = [root]
//     while (queue.length) {
//       let arr = []
//       let len = queue.length
//       for (let i = 0; i < len; i++) {
//         let node = queue.shift()
//         arr.push(node.val)
//         node.left && queue.push(node.left)
//         node.right && queue.push(node.right)
//       }
//       res.push(...arr)
//     }
//     return res
//   };
//   console.log(levelOrder(genTree));
//   process.exit();
// });


// var nodeList = [1, 1, 2, 0, 0, 4, 5] // 层序遍历结果
var nodeList = [1, 1, 2, 0, 0, 4, 5] // 层序遍历结果


var ziNodeList = [5, 3, 0] // 子二叉树
let m = 1
let n = 2
function TreeNode (val) { // 首先定义节点数据结构
  this.val = val;
  this.left = null;
  this.right = null;
}
// let nodeList = inputArray.shift() // 是个string类型
// nodeList = JSON.parse(nodeList) // 转换成数组
var build = function (valueList) {
  if (!valueList || valueList.length === 0) {
    return
  }
  root = new TreeNode(valueList.shift())
  var queue = [root]
  var tempQueue = []
  while (queue.length > 0) {
    var node = queue.shift();
    if (valueList.length === 0) {//构建结束
      break;
    }
    var leftVal = valueList.shift()
    if (leftVal !== 0) {//构建左子节点
      node.left = new TreeNode(leftVal)
      tempQueue.push(node.left)
    }

    if (valueList.length === 0) {//构建结束
      break;
    }
    var rightVal = valueList.shift()
    if (rightVal !== 0) {//构建又子节点
      node.right = new TreeNode(rightVal)
      tempQueue.push(node.right)
    }
    if (queue.length === 0) {//本次构建结束
      queue = tempQueue;
    }
  }
  return root;
}
var genTree = build(nodeList); // 构建成功二叉树
// let str = inputArray.shift() // 弹出一个字符串
// let [q, m, n] = str.split('/') // 得到数组
// let ziNodeList = inputArray.shift()
// ziNodeList = JSON.parse(ziNodeList) // 得到字nodelist
let ziTree = build(ziNodeList)  // 构建子二叉树
// 合并二叉树
// 先找到这个子节点
function getNode (m, n, root) {
  let level = -1
  let count = 0
  let queue = []
  queue.push(root) // 让如根节点
  while (queue.length) {
    level++
    let size = queue.length
    for (let i = 0; i < size; i++) {
      let node = queue.shift()
      count++
      if (level === m && count === n) {
        return node
      }
      node.left && queue.push(node.left)
      node.right && queue.push(node.right)
    }
    count = 0
  }
}
let node = getNode(m, n, genTree) // 得到相同的节点
// 合并新旧二叉树
function mergeTree (genNode, ziNode) {
  if (genNode === null && ziNode === null) return null
  if (ziNode === null) return genNode
  if (genNode === null) return ziNode
  // console.log(ziNode.val);
  genNode.val = ziNode.val // 去子二叉树的值
  genNode.left = mergeTree(genNode.left, ziNode.left)
  genNode.right = mergeTree(genNode.right, ziNode.right)
  return genNode
}
node = mergeTree(node, ziTree)
var levelOrder = function (root) {
  let res = []
  if (!root) return res
  let queue = [root]
  while (queue.length) {
    let arr = []
    let len = queue.length
    for (let i = 0; i < len; i++) {
      let node = queue.shift()
      arr.push(node.val)
      node.left && queue.push(node.left)
      node.right && queue.push(node.right)
    }
    res.push(...arr)
  }
  return res
};
console.log(levelOrder(genTree));
// console.log(node.val);
// 合并新旧二叉树



// console.log(levelOrder(node));
